`
https://leetcode.cn/problems/maximum-number-of-distinct-elements-after-operations/
`

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var maxDistinctElements = function (nums, k) {
  // 有效取值范围比 nums 还大，则数组里的每个数一定能分配到一个位置
  if (k * 2 + 1 >= nums.length) {
    return nums.length
  }
  // 所有元素有效取值范围为 [minVal - k, maxVal + k]
  // 将所有数尽可能的减小，让后面的数有更大的取值范围
  nums.sort((a, b) => a - b)
  // 符合条件的最大数量
  let count = 1
  // 第一个数放到最小的位置
  let prev = nums[0] - k
  for (let i = 1; i < nums.length; i++) {
    // 不断贪心
    const cur = Math.min(
      // 最小取值为 prev + 1
      Math.max(prev + 1, nums[i] - k),
      nums[i] + k
    )
    // 找到合适的位置
    if (cur > prev) {
      count++
      prev = cur
    }
  }
  return count
};